Zum Hauptinhalt springen

Android SDK

Bauen Sie AR Clip VPS in eine native Android-App ein. Das SDK bestimmt auf ARCore-Geräten die Position des Nutzers auf Ihren VPS-Karten und bringt Sceneform-Fragmente und Helfer für den Lebenszyklus mit.

Bevor Sie beginnen​

  • Android SDK 24 (Android 7.0) oder neuer
  • Ein Gerät mit Unterstützung für ARCore
  • Ein Kotlin-Projekt (die Beispiele sind in Kotlin)
Brauchen Sie einen API-Schlüssel?

Sie erhalten ihn auf arclip.design oder per E-Mail an support@arclip.design.

Installieren​

  1. Stellen Sie sicher, dass das Projekt Artefakte aus Maven Central bezieht:

    allprojects {
    repositories {
    mavenCentral()
    // other repositories...
    }
    }
  2. Fügen Sie die Abhängigkeit zu Ihrem App-Modul hinzu:

    dependencies {
    implementation "com.arstudio:wasvps-sdk:1.0.0"
    }
  3. Synchronisieren Sie Gradle.

Das Manifest einrichten​

Deklarieren Sie ARCore als Voraussetzung. Liegt das minSdk Ihrer eigenen App unter 24, fügen Sie zusätzlich den Override uses-sdk hinzu, sonst schlägt der Build fehl. Das SDK selbst braucht trotzdem Android 7.0 (API 24) oder neuer.

<!-- Only if your app's minSdk is below 24 -->
<uses-sdk tools:overrideLibrary="com.arstudio.wasvps_sdk, com.google.ar.sceneform.sceneform, com.google.ar.sceneform.ux" />

<!-- Restrict to ARCore hardware (default). Set required=false to broaden install base. -->
<uses-feature
android:name="android.hardware.camera.ar"
android:required="true" />

Damit der Play Store die App mehr Geräten anbietet, setzen Sie android:required="false" und fügen tools:replace="android:required" hinzu, damit Ihr Wert den Wert aus dem SDK ersetzt:

<uses-feature
android:name="android.hardware.camera.ar"
android:required="false"
tools:replace="android:required" />

Schnellstart mit WASVPSArFragment​

Fügen Sie das mitgelieferte Fragment Ihrem Layout hinzu:

<!-- res/layout/activity_main.xml -->
<androidx.fragment.app.FragmentContainerView
android:id="@+id/vFragmentContainer"
android:name="com.arstudio.wasvps_sdk.ui.WASVPSArFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

supportFragmentManager.beginTransaction()
.replace(R.id.vFragmentContainer, WASVPSArFragment())
.commit()
}
}

Sobald Sie Standort-IDs haben, holen Sie den Dienst und starten die Lokalisierung:

val fragment = supportFragmentManager
.findFragmentById(R.id.vFragmentContainer) as WASVPSArFragment

val config = WASVPSConfig.getIndoorConfig(listOf("your-location-id"))
val service = fragment.vpsService

service.setVpsConfig(config)
service.setVpsCallback(object : VpsCallback {
override fun onSuccess() = Unit
override fun onFail() = Unit
override fun onStateChange(state: State) = Unit
override fun onError(error: Throwable) {
Log.e("VPS", "Localization error", error)
}
})

service.startVpsService()

Rufen Sie service.stopVpsService() auf, wenn das AR-Erlebnis pausieren soll, zum Beispiel in onPause.

Ein eigenes Fragment verwenden​

Haben Sie ein eigenes ArFragment oder ArSceneView, erstellen und verwalten Sie WASVPSService selbst:

class CustomArFragment : ArFragment() {
private val vpsService = WASVPSService.newInstance()

override fun onAttach(context: Context) {
super.onAttach(context)
WASVPSSdk.init(context.applicationContext)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
vpsService.bindArSceneView(arSceneView)
vpsService.setVpsConfig(WASVPSConfig.getOutdoorConfig(listOf("location-id")))
}

override fun onResume() {
super.onResume()
vpsService.resume()
vpsService.startVpsService()
}

override fun onPause() {
vpsService.pause()
vpsService.stopVpsService()
super.onPause()
}

override fun onDestroyView() {
vpsService.destroy()
super.onDestroyView()
}
}

Inhalte platzieren​

Fügen Sie Nodes als Kinder von vpsService.worldNode hinzu. Sobald VPS erfolgreich lokalisiert hat, folgt jedes Kind der lokalisierten globalen Position.

val anchorNode = Node().apply {
setParent(vpsService.worldNode)
localPosition = Vector3(0f, 0f, -1f)
}

Fehlerbehebung​

  • Prüfen Sie, ob Google Play Services for AR auf dem Testgerät installiert und aktuell ist.
  • Gelingt die Lokalisierung nie, prüfen Sie den API-Schlüssel, den Sie dem SDK übergeben (über eine sichere Konfiguration), und ob Ihre Standort-IDs existieren.
  • Ein vollständiges Beispiel inklusive Laufzeitberechtigungen und UI finden Sie im Modul /sample im Repository.